#include "../include/log_in.h"

// 声明函数

// 登陆的密码验证
Log_in_data log_in(Double_Link_List *list_1, Double_Link_List *list_2)
{
    Log_in_data log_data;
    Double_Node *ptr = NULL;
    memset(&log_data, 0, sizeof(log_data));
    if (NULL == list_1 || NULL == list_2)
    {
        ERRLOG("链表的动态空间为空");
        return log_data;
    }
    // 登陆次数控制
    int num = 3;

    while (1)
    {

        // 用户输入账号以及密码
        printf("输入你的账号:");
        scanf("%s", log_data.name);
        printf("输入你的密码:");
        scanf("%s", log_data.password);

        if (NULL != (ptr = find_double_node_name(list_1, log_data.name)))
        {
            if (!strcmp(ptr->data.password, log_data.password))
            {
                // printf("登陆成功\n");
                log_data = ptr->data;
                return log_data;
            }
        }
        if (NULL != (ptr = find_double_node_name(list_2, log_data.name)))
        {
            if (!strcmp(ptr->data.password, log_data.password))
            {
                // printf("登陆成功\n");
                log_data = ptr->data;
                return log_data;
            }
        }
        num--;
        if (0 == num)
        {
            printf("三次输入错误 请稍后再试\n");
            exit(-1); // 退出进程
        }
    }
}

// 注册
void reg(Double_Link_List *list)
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return;
    }
    Log_in_data log_data;
    char password[128];
    log_data.id = '0';
    printf("请输入你 账号:\n");
    scanf("%s", log_data.name);

    printf("请输入你的密码:\n");
    scanf("%s", log_data.password);

    printf("请再次输入你的密码:\n");
    scanf("%s", password);

    if (strcmp(password, log_data.password))
    {
        printf("两次密码输入不相同 请重新运行本程序\n");
        exit(-1);
    }

    printf("恭喜你 注册成功\n");

    // 插入到链表

    insert_double_node(list, log_data, 1);

    // 写入到文件
    F_print(list, "2_dom_data.txt");
}

// 修改普通信息
void root_amend(Double_Link_List *list, Double_Link_List *list_1) // list为普通用户，list_1为root用户
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return;
    }

    // find_double_node_name
    int num = 0; // 功能选择
    char buf[128];
    printf("请确认你需要修改的账号 %s:\n", buf);
    scanf("%s", buf);
    Double_Node *ptr = find_double_node_name(list, buf);
    printf("请输入你需要修改的信息 1 账号 2 密码 3 升级权限:\n");
    scanf("%d", &num);
    switch (num)
    {
    case 1:
        printf("请输入你的账号");
        scanf("%s", buf);
        strcpy(ptr->data.name, buf);
        printf("账号修改成功 账号为 %s\n", buf);
        F_print(list,"2_dom_data.txt");
        break;
    case 2:
        printf("请输入你的密码");
        scanf("%s", buf);
        if (!strcmp(ptr->data.password, buf))
        {
            printf("你个笨蛋 新密码 不能和旧密码相同\n");
            free(ptr);
            return;
        }
        strcpy(ptr->data.password, buf);
        printf("密码修改成功 密码为 %s\n", buf);
        F_print(list,"2_dom_data.txt");
        break;
    case 3:
        ptr->data.id = '1';
        printf("恭喜 \"%s\" 用户 成功升级为 svip\n", ptr->data.name);
        insert_double_node(list_1, ptr->data, 1); // 管理员写入
        F_print(list_1, "1_root_data.txt");

        Double_Node *ptr2 = list->next; // 普通用户写入
        int i;
        for (i = 0; 0 == strcmp(ptr2->data.name, ptr->data.name) ; i++)
        {
            if (NULL!=ptr2)
            {
                ptr2 = ptr2->next;
            }
        }
        delete_double_node(list, i);
        print_forward_double_link_list(list);
        F_print(list, "2_dom_data.txt");
        free(ptr2);
        break;
    default:
        break;
    }
    free(ptr);
    return ;
}

// 删除普通用户
void root_delete(Double_Link_List *list) // list为普通用户
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return;
    }
    char buf[128];
    printf("请确认你需要删除的账号:\n");
    scanf("%s", buf);
    Double_Node *ptr = find_double_node_name(list, buf);
    if (NULL == ptr)
    {
        printf("查无此账号\n");
        return;
    }
    // 删除账号，用ptr来留住删除的数据
    Double_Node *ptr2 = list->next; // 普通用户写入
    int i;
       for (i = 0; 0 == strcmp(ptr2->data.name, ptr->data.name) ; i++)
        {
            if (NULL!=ptr2)
            {
                ptr2 = ptr2->next;
            }
        }
    delete_double_node(list, i);

    printf("恭喜 \"%s\" 用户 成功被删除\n", ptr->data.name);
    F_print(list, "2_dom_data.txt");
//     free(ptr2);
//     free(ptr);
//     ptr = NULL;
//     ptr2 = NULL;
return;
}


//清空普通用户
void root_clear(Double_Link_List *list) // list为普通用户
{
    if (NULL == list)
    {
        ERRLOG("链表的动态空间为空");
        return;
    }
    if (NULL == list->next)
    {
        ERRLOG("链表内无数据");
        return;
    }
    
    clear_double_link_list(list);
    printf("所有账号成功被清空\n");
    F_print(list, "2_dom_data.txt");
    return;
}



/*
// print_forward_double_link_list(list);
        // printf("账号:%s\t密码:%s\tid:%c\n", ptr2->data.name, ptr2->data.password, ptr2->data.id);
        //  printf("账号:%s\t密码:%s\tid:%c\n", ptr->data.name, ptr->data.password, ptr->data.id);
*/